Реализация gRPC-метода VerifyAndRotate в auth-service

Проверка черного списка в Redis, валидация сессии в PostgreSQL и атомарная ротация токенов (RTR).

Author

Services Task & Simulation Framework Documentation

Published

July 13, 2026

NoteКраткая карточка задачи
  • Репозиторий / Компонент: auth-service (Backend контура авторизации).
  • Категория: Бэкенд.
  • Контракт методов: gRPC rpc VerifyAndRotate(RefreshRequest) returns (RotateResponse);
  • Спецификация контракта: См. Раздел: Protobuf Контракт: VerifyAndRotate
  • Статус: Готово к реализации

  • Предварительные условия (Prerequisites):
    1. Убедиться, что gRPC-сообщение зафиксировано в репозитории контрактов строго по Спецификации Protobuf и стабы обновлены.
  • Инструкция по шагам:
    1. На Шаге 3 (Прием и валидация): Реализовать gRPC-хэндлер VerifyAndRotate. При отсутствии refresh_token возвращать ошибку gRPC Status: INVALID_ARGUMENT.
    2. На Шаге 4-5 (Проверка Redis Blacklist): Выполнить команду EXISTS "revoked:refresh:<token_hash>" в Redis. Если токен найден в блэклисте, прерывать выполнение и возвращать gRPC Status: UNAUTHENTICATED (попытка Replay-атаки). Обернуть вызов в try-except: при падении кэша активировать стратегию Fail-Close с возвратом логического статуса для ошибки HTTP 503.
    3. На Шаге 6 (Проверка PostgreSQL): Запросить статус сессии: SELECT is_revoked, expires_at, user_id FROM user_sessions WHERE refresh_token_hash = :hash LIMIT 1;. Если is_revoked == true, сессия просрочена или отсутствует, возвращать gRPC Status: UNAUTHENTICATED.
    4. На Шаге 7 (Атомарная ротация и генерация): Извлечь метаданные пользователя (user_id, home_group_id, account_type) из старой сессии. Сгенерировать новую пару токенов, сохранив все JWT Claims. В рамках единой SQL-транзакции пометить старый refresh_token как is_revoked = true и вызвать INSERT INTO user_sessions для новой сессии. Вернуть структуру RotateResponse.